#!/bin/bash

# 数学计算
# * Shell 不能直接进行算术运算，不许试用数学计算命令。
# *默认情况下， Shell 不会直接进行算术运算，而是把“+”号两边的数据（数值或者变量）当做字符串，把“+”号当做字符串连接符，结果是把两个字符串拼接在一起形成一个新的字符串。
# *在 Bash Shell 中，如果不特别指明，每一个变量的值都是字符串，无论你给变量赋值时有没有使用引号，值都会以字符串的形式存储。
# * Bash shell 在默认情况下不区分变量类型，即使将整数和小数赋值给变量，它们也会被视为字符串，这一点和大部分的编程语言不同。
# Shell 算术运算符一览表：
# +、-	                加法（或正号）、减法（或负号）
# *、/、%	              乘法、除法、取余（取模）
# **	                  幂运算
# ++、--	              自增和自减，可以放在变量的前面也可以放在变量的后面
# !、&&、||	            逻辑非（取反）、逻辑与（and）、逻辑或（or）
# <、<=、>、>=	        比较符号（小于、小于等于、大于、大于等于）
# ==、!=、=	            比较符号（相等、不相等；对于字符串，= 也可以表示相当于）
# <<、>>	              向左移位、向右移位
# ~、|、 &、^	          按位取反、按位或、按位与、按位异或
# =、+=、-=、*=、/=、%=	赋值运算符，例如 a+=1 相当于 a=a+1，a-=1 相当于 a=a-1
# *要想让数学计算发挥作用，必须使用数学计算命令。
# Shell 中常用的数学计算命令一览表：
# (( ))	      用于整数运算，效率很高，推荐使用。
# let	        用于整数运算，和 (()) 类似。
# $[]	        用于整数运算，不如 (()) 灵活。
# expr	      可用于整数运算，也可以处理字符串。比较麻烦，需要注意各种细节，不推荐使用。
# bc	        Linux下的一个计算器程序，可以处理整数和小数。【 Shell 本身只支持整数运算，想计算小数就得使用 bc 这个外部的计算器】
# declare -i	将变量定义为整数，然后再进行数学运算时就不会被当做字符串了。功能有限，仅支持最基本的数学运算（加减乘除和取余），不支持逻辑运算、自增自减等，所以在实际开发中很少使用。

# 演示 Shell 加号做拼接使用
echo 2+8 # 输出：“2+8”
a=23
b=$a+55
echo $b  # 输出：“23+55”
b=90
c=$a+$b
echo $c  # 输出：“23+90”

# 演示数学计算
# 注意：在 git bash 中好像不支持 bc运算会报“bc: command not found”错误。
# *很多东西都应该在 linux 上面做演示
numberOne=3
numberTwo=7
floatOne=3.1415927
floatTwo=7.0000009
stringNumberOne="3"
stringNumberTwo="7"
stringFloatOne="3.1415927"
stringFloatTwo="7.0000009"
resultOne=$(($numberOne+numberTwo))           # 变量名前可以加 $ ，也可以不加【变量可以直接是数值】
let resultTwo=numberOne+numberTwo             # 使用 let 执行运算时，变量名之前不需要添加 $
resultThree=$[numberOne+numberTwo]            #  变量名前可以加 $ ，也可以不加【变量可以直接是数值】
resultFour=$(expr $stringNumberOne + $stringNumberTwo) #  变量名前可以加 $ ，也可以不加【变量可以直接是数值】
echo "数学计算方法 $(()) 结果是：$resultOne"
echo "数学计算方法 let   结果是：$resultTwo"
echo "数学计算方法 $[]   结果是：$resultThree"
echo "数学计算方法 expr  结果是：$resultFour"
